/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author fuerte
 */


import java.sql.ResultSet;
import java.util.LinkedList;

public class Articulo_DAO implements DAO {

    private String sentenciaSQL;
    ConexionDB conexion;
    LinkedList<Articulo_POJO> listaDetalle = new LinkedList<Articulo_POJO>();
    ResultSet resultado;
    int valor=-1;

    public Articulo_DAO(ConexionDB conexion) {
        this.conexion = conexion;
    }

    public LinkedList<Articulo_POJO> obtenerReg(int IdArticulo) {


        sentenciaSQL = "SELECT * FROM Articulo WHERE idArticulo = " + IdArticulo;
        System.out.println("Obtener " + sentenciaSQL);
        try {

                conexion.abrirConexion();
            resultado = conexion.getResultSet(sentenciaSQL);
            if (resultado.next()) {
                Articulo_POJO articulo = new Articulo_POJO();

                articulo.setDescripcion(resultado.getString("descripcion"));
                articulo.setFechaIngreso(resultado.getString("fechaIngreso"));
                articulo.setIdArticulo(Integer.parseInt(resultado.getString("idArticulo")));
                articulo.setIdCategoria(Integer.parseInt(resultado.getString("idCategoria")));
                articulo.setIdStatus(Integer.parseInt(resultado.getString("idStatus")));
                articulo.setIdUsuario(Integer.parseInt(resultado.getString("idUsuario")));
                articulo.setImagen(resultado.getString("imagen"));
                articulo.setNombre(resultado.getString("nombre"));
                articulo.setPrecio(Double.parseDouble(resultado.getString("precio")));
                articulo.setPuntuacion(Integer.parseInt(resultado.getString("puntuacion")));

                listaDetalle.add(articulo);
                //Prueba
                //System.out.println("Resultado " + resultado.getString("nombre"));
                conexion.cerrarConexion();
            }

        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);
            return null;
        }
        return listaDetalle;
    }

    public int guardarReg(int idArticulo, String nombre, int puntuacion, String fechaIngreso, String descripcion, Double precio, String imagen, int idCategoria, int idStatus, int idUsuario) {

        sentenciaSQL = "INSERT INTO Articulo ( idArticulo, nombre, puntuacion, fechaIngreso, descripcion, precio, imagen, idCategoria, idUsuario  ) VALUES "
                + "(" + idArticulo + ", " + nombre + ", " + puntuacion + ", " + fechaIngreso + ", "
                + descripcion + ", " + precio + ", " + imagen + ", " + idCategoria + ", " + idStatus + ", " + idUsuario + " )";

        System.out.println("Query:  " + sentenciaSQL);
        try {
               
                 conexion.abrirConexion();
             valor = conexion.executeQuery(sentenciaSQL);
             //System.out.println ("Insert exitoso");
             conexion.cerrarConexion();
             return valor;
             
        } catch (Exception ex) {
            System.out.println("error " + ex);
            return -1;
        }
    }

    public int actualizarReg(int idArticulo, String nombre, int puntuacion, String fechaIngreso, String descripcion, Double precio, String imagen, int idCategoria, int idStatus, int idUsuario) {

        sentenciaSQL = "UPDATE Articulo SET nombre= '" + nombre + "', puntuacion=" + puntuacion + ", fechaIngreso'" + fechaIngreso + "', descripcion='"
                + descripcion + "', precio=" + precio + ", imagen= '" + imagen + "',idCategoria='" + idCategoria + "',idStatus= " + idStatus + ",idUsuario " + idUsuario
                + " WHERE idArticulo=" + idArticulo;
        System.out.println("Update " + sentenciaSQL);

        try {
                conexion.abrirConexion();
            valor = conexion.executeQuery(sentenciaSQL);
            //System.out.println ("Update exitoso");
            conexion.cerrarConexion();
            return valor;
           
       } catch (Exception ex) {
           System.out.println("error " + ex);
           return -1;
       }
    }

    public int eliminarReg(int idArticulo) {
        sentenciaSQL = "DELETE FROM Articulo WHERE idArticulo = " + idArticulo;
        System.out.println("Delete Query: " + sentenciaSQL);
        try {
                conexion.abrirConexion();
            valor = conexion.executeQuery(sentenciaSQL);
            //System.out.println ("Delete exitoso");
            conexion.cerrarConexion();
            return valor;
           
       } catch (Exception ex) {
            System.out.println("error " + ex);
            return -1;
       }
    }
       
        /**
     * reporta el artículo más vendido en el año (year) seleccionado
     */
    public ResultSet repoArticuloMasVendido(String year) {
        sentenciaSQL = "SELECT articulo.nombre, sum(detalle.cantidad) cantidad"
                + " FROM pedido, articulo, detalle "
                + "WHERE detalle.idarticulo = articulo.idarticulo AND pedido.idpedido = detalle.idpedido AND "
                + "pedido.fechaingreso between '01/01/" + year + "' AND '31/12/" + year + "' "
                + "GROUP BY articulo.idarticulo having sum(detalle.cantidad)=( "
                + "SELECT max(total) FROM( SELECT sum(detalle.cantidad) total "
                + "FROM pedido, articulo, detalle "
                + "WHERE detalle.idarticulo = articulo.idarticulo AND pedido.idpedido = detalle.idpedido "
                + "AND pedido.fechaingreso between '01/01/" + year + "' AND '31/12/" + year + "' "
                + "GROUP BY articulo.idarticulo) tot); ";
        try {
            conexion.abrirConexion();
            resultado = conexion.getResultSet(sentenciaSQL);
            conexion.cerrarConexion();
            return resultado;
        } catch (Exception ex) {
            //Error lanzado
            System.out.println("Error " + ex);
            return null;
        }
    }
}

